package com.example.personblog.controller;

import com.example.personblog.entity.Order;
import com.example.personblog.mapper.OrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
//它是@Controller和@ResponseBody的 “组合注解”：
//@Controller：告诉 Spring “这是一个控制器”，负责接收请求。
//@ResponseBody：自动将控制器方法的返回值（比如List<Order>）转换为 JSON 格式的响应数据，直接返回给前端（无需再通过视图解析器跳转页面）。
//所以你的理解 “变成控制器可以接收前端请求” 是对的，额外补充：它还会自动把返回结果转成 JSON，适合前后端分离的接口开发。
@RestController
public class OrderController {
    @Autowired
    private OrderMapper orderMapper;
//为什么需要它？
//OrderMapper是一个接口（MyBatis 的 Mapper 接口），我们不能直接用new OrderMapper()创建实例（接口无法实例化）。
//实际上，OrderMapper的实例是 MyBatis 通过动态代理生成的，由 Spring 容器管理。
//@Autowired会告诉 Spring：“我需要一个OrderMapper的实例，你帮我找一个并赋值给我”，无需手动处理，简化了代码。
    @GetMapping("/order/findAllWithUser")
    public List<Order> findAllWithUser() {
        return orderMapper.findAll();
    }
}
//2. 结合代码的实际数据流转
//以 OrderController 的 findAllWithUser() 方法为例，数据流转过程中 List<Order> 的作用：
//前端访问 http://localhost:8080/order/findAllWithUser，触发方法执行；
//方法调用 orderMapper.findAll()，MyBatis 执行 SQL 查询 tb_orders 表的所有订单数据；
//MyBatis 会把查询到的 每一条订单记录 自动封装成一个 Order 对象（同时通过关联查询填充 user 属性）；
//所有封装好的 Order 对象被存入 List 集合，形成 List<Order>；
//控制器将 List<Order> 返回，@RestController 会把这个集合自动转为 JSON 格式响应给前端。